const { resolve } = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
// 压缩css
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')

// 为了让postcss生效而设置的环境变量
process.env.NODE_ENV = 'development'

module.exports = {
  entry: resolve(__dirname, './src/js/index.js'),
  output: {
    filename: 'js/built.js',
    // 输出到的文件夹
    path: resolve(__dirname, 'build'),
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        // 使用多个loader处理用use
        // style-loader创建style标签，将样式放入
        // css-loader将css文件整合到js文件中
        // use: ['style-loader', 'css-loader'],
        // 这里专门处理css，取代style-loader，提取css成为单独文件。
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          // 修改loader的配置
          {
            // 解决css浏览器兼容性的问题
            loader: 'postcss-loader',

            // 新的方法
            options: {
              postcssOptions: {
                config: resolve(__dirname, './postcss.config.js'),
              },
            },

            // 老师的方法，行不通的。
            // options: {
            //   ident: 'postcss',
            //   plugins: () => {
            //     require('postcss-preset-env')()
            //   },
            // },
          },
        ],
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: resolve(__dirname, './src/index.html'),
    }),
    new MiniCssExtractPlugin({
      // 重命名输出的文件
      filename: 'css/built.css',
    }),
    // 压缩css
    new OptimizeCssAssetsPlugin(),
  ],
  mode: 'development',
}
